#include<stdio.h>
#include<stdbool.h>
#include<string.h>
#define Size 10
void InitBoard(char (*Board)[Size])
{
    for(int i=0;i<Size;i++)
    {
        for(int j=0;j<Size;j++)
        {
                Board[i][j]='-';
        }
    }
}
void PrintBoard(char(*Board)[Size])
{
    printf("    ");
    for(int i=0;i<Size;i++)
    {
        printf("%4d",i+1);
    }
         printf("\n");
    
    for(int i=0;i<Size;i++)
    {   
        printf("%4d",i+1);
        for(int j=0;j<Size;j++)
        {
            printf("%4c",Board[i][j]);

            
        }
        printf("\n");
       
    }
}
bool  CheckIsDrawn(char (*Board)[Size])
{
    for(int i=0;i<Size;i++)
    {
        for(int j=0;j<Size;j++)
        {
               if(Board[i][j]=='-')
                    return false;
        }
    }
    return  true;
}
bool MakeMove(char (*Board)[Size],int row,int col,char player)
{
    if(row<0||row>=Size||col<0||col>=Size)
    {
        printf("非法位置：请重新输入！\n");
        return false;
    }
    if(Board[row][col]!='-')
    {
        printf("位置非空，请重新输入！\n");
        return false;
    }
    Board[row][col]=player;
    return true;
}
bool IsValidPlace(int row,int col)
{
    if(row<0||row>=Size||col<0||col>=Size)
    {
            return false;
    }3 3
    return true;

}
bool CheckIsWin(char (*Board)[Size],int row,int col,char player)
{   
    
    int direction[4][2]=
    {
        {1,0},
        {1,1},
        {0,1},
        {-1,1},

    };
    for(int i=0;i<4;i++)
    {
        int count=1;
        int drow=row+direction[i][0];
        int dcol=col+direction[i][1];
        while(IsValidPlace(drow,dcol)&&Board[drow][dcol]==player)
        {
            count++;
            if(count==5)
            {
                return true;
            }
            drow=drow+direction[i][0];
            dcol=dcol+direction[i][1];

        }
         drow=row-direction[i][0];
         dcol=col-direction[i][1];
        while(IsValidPlace(drow,dcol)&&Board[drow][dcol]==player)
        {
            count++;
             if(count==5)
            {
                return true;
            }
            drow=drow-direction[i][0];
            dcol=dcol-direction[i][1];

        }
       
    }
    return false;
}

void    Single()
{
        return 0;
}



//双人
void Double()
{
     char Board[Size][Size]={0};
    InitBoard(Board);
    char player='X';
    while(1)
    {
        PrintBoard(Board);
        int row,col;
        printf("请|%c|选手下棋:",player);
        scanf("%d %d",&row,&col);
        if(MakeMove(Board,row-1,col-1,player)==false)
        {
            continue;
        }
        if(CheckIsWin(Board,row-1,col-1,player)==true)
        {
             PrintBoard(Board);
            printf("恭喜|%c|选手获胜！\n",player);
            break;
        }
        if(CheckIsDrawn(Board)==true)
        {
            PrintBoard(Board);
            printf("平局\n");
            break;
        }
        player=(player=='X')?'O':'X';//换人
    }
    return 0;

}
int main(int argc, char *argv[])
{
    if(argc<2)

{
    printf("缺少命令行参数\n");
    return 0;
}
    if(strcmp(argv[1],"1")==0)
    {
        Single();
    }
    else
    {
        Double();
    }


}